﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos

Public Class ImpLocalBL
    Public Function RegistrarImpLocal(ByVal TokenConexion As String, ByVal ImpLocal As ImpLocalBE, ByRef detResp As DetalleRespuesta) As Boolean
        Dim ImpLocalDAL As ImpLocalDAL = New ImpLocalDAL("")
        detResp.Mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Registrar, ImpLocal, detResp.Mensajes)) Then
                ImpLocalDAL = New ImpLocalDAL(TokenConexion)
                If (ImpLocalDAL.existeImpLocal(ImpLocal.Impuesto)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_PreviamenteRegistrado,
                                             "Existe un registro con la descripción del Impuesto Local indicado." & vbCrLf & detResp.Mensajes)
                    Return False
                Else
                    If (ImpLocalDAL.registraImpLocal(ImpLocal)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                                 "El Impuesto Local se registro con éxito.")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "El Impuesto Local no pudo ser registrado en el sistema." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El Impuesto Local no es valido para registrar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.RegistrarImpLocal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al registrar Impuesto Local: " & ex.Message)
            Return False
        Finally
            ImpLocalDAL = Nothing
        End Try
    End Function

    Private Function EsValidoPara(ByVal tipoOperacion As Enumeraciones.operacionesCatalogos, ByRef ImpLocal As ImpLocalBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (tipoOperacion = Enumeraciones.operacionesCatalogos.Actualizar) Then
                If (String.IsNullOrEmpty(ImpLocal.IdImpLocal)) Then
                    mensaje &= "El Id del Impuesto local es rquerido." & vbCrLf
                Else
                    If (ImpLocal.IdImpLocal < 1) Then
                        mensaje &= "El Id del Impuesto local debe ser mayor a 0 y estar previamente registrado." & vbCrLf
                    End If
                End If
            End If
            If (String.IsNullOrWhiteSpace(ImpLocal.Impuesto)) Then
                mensaje &= "La descripcion del Impuesto Local es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                ImpLocal.Impuesto = ImpLocal.Impuesto.Trim
                If (ImpLocal.Impuesto.Length > 50) Then
                    ImpLocal.Impuesto = ImpLocal.Impuesto.Substring(0, 50)
                End If
            End If
            If (String.IsNullOrWhiteSpace(ImpLocal.Tasa)) Then
                mensaje &= "La Tasa del Impuesto Local es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                If Not (IsNumeric(ImpLocal.Tasa)) Then
                    mensaje &= "La Tasa del Impuesto Local debe ser de tipo numérico." & vbCrLf
                Else
                    If (ImpLocal.Tasa < 0 Or ImpLocal.Tasa > 100) Then
                        mensaje &= "La Tasa del Impuesto Local debe ser un valor entre 0 y 100." & vbCrLf
                    End If
                    ImpLocal.Tasa = Decimal.Parse(ImpLocal.Tasa).ToString("N2")
                End If
            End If
            If (String.IsNullOrEmpty(ImpLocal.Tipo)) Then
                mensaje &= "El Tipo del Impuesto Local es obligatoria, no puede ir el campo vacio." & vbCrLf
            End If
            If (String.IsNullOrEmpty(ImpLocal.AfectaIVA)) Then
                mensaje &= "AfectaIVA del Impuesto Local es obligatorio, no puede ir el campo vacio." & vbCrLf
            End If
            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaImpLocal(ByVal TokenConexion As String, ByVal ImpLocal As ImpLocalBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim ImpLocalDAL As ImpLocalDAL = New ImpLocalDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Actualizar, ImpLocal, detResp.Mensajes)) Then
                ImpLocalDAL = New ImpLocalDAL(TokenConexion)
                If (ImpLocalDAL.actualizaImpLocal(ImpLocal, detResp.Mensajes)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Datos de Impuesto Local Actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos de Impuesto Local." & vbCrLf &
                                             "Verifique que el Id de Impuesto Local esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.ActualizaImpLocal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al actualizar Impuesto Local: " & ex.Message)
            Return False
        Finally
            ImpLocalDAL = Nothing
        End Try
    End Function

    Public Function GetImpLocal(ByVal tokenConexion As String, ByVal IdImpLocal As Integer, ByRef detResp As DetalleRespuesta) As ImpLocalBE
        detResp.Mensajes = ""
        Dim ImpLocalDAL As ImpLocalDAL = New ImpLocalDAL("")
        Dim ImpLocalBE As ImpLocalBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetImpLocal(IdImpLocal, detResp.Mensajes)) Then
                ImpLocalDAL = New ImpLocalDAL(tokenConexion)
                ImpLocalBE = ImpLocalDAL.getImpLocal(IdImpLocal)
                If (ImpLocalBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Se obtuvo la información del Impuesto Local con éxito.")
                    Return ImpLocalBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                             "No se obtuvo la información del Impuesto Local" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El ID del Impuesto Local contiene valor invalido " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.GetImpLocal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información del Impuesto Local: " & ex.Message)
            Return Nothing
        Finally
            ImpLocalDAL = Nothing
            ImpLocalBE = Nothing
        End Try
    End Function

    Public Function CambiaEstatusImpLocal(ByVal tokenConexion As String, ByVal Id As Integer, ByVal setActivo As Boolean,
                                           ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim ImpLocalDAL As ImpLocalDAL = New ImpLocalDAL("")
        Try
            If (EsValidoParaGetImpLocal(Id, detResp.Mensajes)) Then
                ImpLocalDAL = New ImpLocalDAL(RijndaelSimple.desencriptaDefault(tokenConexion))
                If (ImpLocalDAL.cambiaStatus(Id, setActivo)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Estatus del Impuesto Local Actualizado.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de estatus del Impuesto Local." & vbCrLf &
                                             "Verifique que el Id de Impuesto Local esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.CambiaEstatusImpLocal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar estatus del Impuesto Local: " & ex.Message)
            Return False
        Finally
            ImpLocalDAL = Nothing
        End Try
    End Function

    Public Function CambiaAfectaIVAImpLocal(ByVal tokenConexion As String, ByVal Id As Integer, ByVal setAfectaIVA As Boolean,
                                           ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim ImpLocalDAL As ImpLocalDAL = New ImpLocalDAL("")
        Try
            If (EsValidoParaGetImpLocal(Id, detResp.Mensajes)) Then
                ImpLocalDAL = New ImpLocalDAL(RijndaelSimple.desencriptaDefault(tokenConexion))
                If (ImpLocalDAL.cambiaAfectaIVA(Id, setAfectaIVA)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Valor de Afecta IVA del Impuesto Local Actualizado.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización del valor de Afecta IVA del Impuesto Local." & vbCrLf &
                                             "Verifique que el Id de Impuesto Local esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.CambiaAfectaIVAImpLocal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar valor de Afecta IVA del Impuesto Local: " & ex.Message)
            Return False
        Finally
            ImpLocalDAL = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetImpLocal(ByRef IdImpLocal As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(IdImpLocal)) Then
                mensaje &= "El campo ID del Impuesto Local no puede ir  vacio." & vbCrLf
            Else
                If (IdImpLocal <= 0) Then
                    mensaje &= String.Format("El ID <{0}> del Impuesto Local debe ser un valor mayor a 0", IdImpLocal) & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.EsValidoParaGetImpLocal")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoImpLocal(ByVal tokenConexion As String, ByVal tipoImpuesto As Enumeraciones.tipoImpuestosLocalesParaBusquedas,
                                ByVal tipoStatus As Enumeraciones.estatusParaBusquedas, ByVal tipoAffIVA As Enumeraciones.tipoAfectaIVAParaBusquedas,
                                ByRef detResp As DetalleRespuesta) As List(Of ImpLocalBE)
        detResp.Mensajes = ""
        Dim ImpLocalDAL As ImpLocalDAL = New ImpLocalDAL("")
        Dim listImpLocalBE As List(Of ImpLocalBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            ImpLocalDAL = New ImpLocalDAL(tokenConexion)
            listImpLocalBE = ImpLocalDAL.getListadoImpLocal(tipoImpuesto, tipoStatus, tipoAffIVA)
            If (listImpLocalBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo el listado de Impuestos Locales con éxito.")
                Return listImpLocalBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                         "No se obtuvo el listado de los Impuestos Locales." & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "ImpLocalBL.GetListadoImpLocal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al obtener el listado de Impuestos Locales: " & ex.Message)
            Return Nothing
        Finally
            ImpLocalDAL = Nothing
            listImpLocalBE = Nothing
        End Try
    End Function

End Class
